package com.mp.approvalreq.dao;

import com.mp.approvalreq.entity.Template;
import com.mp.approvalreq.entity.dto.*;
import com.mp.approvalreq.entity.po.ComponentGroup;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * 模板的查询dao
 *
 * @author xq
 */
public interface SelectTemplateDao {

	/**
	 * 获取组件集列表的详情
	 *
	 * @param companyId
	 * @param ids
	 * @return
	 * @throws SQLException
	 */
	List<ComponentGroup> selectComponentGroupInfoList(Integer companyId, String ids) throws SQLException;

	/**
	 * 获取公司通用的组件集列表
	 *
	 * @param companyId
	 * @return
	 * @throws SQLException
	 */
	List<ComponentGroup> selectComponentGroupList(Integer companyId) throws SQLException;

	/**
	 * 获取组件集详情
	 *
	 * @param companyId
	 * @param componentGroupId
	 * @return
	 * @throws SQLException
	 */
	ComponentGroup selectComponentGroupById(Integer companyId, Integer componentGroupId) throws SQLException;

	/**
	 * 获取模板的一些信息
	 *
	 * @param defaultType
	 * @return
	 * @throws SQLException
	 */
	TemplateDTO getTemplateDTO(Integer defaultType) throws SQLException;

	/**
	 * 获取公司所有的模板Id,用于判断是否是新公司加入
	 *
	 * @param companyId
	 * @return
	 * @throws SQLException
	 */
	List<Integer> getAllTemplateIdList(Integer companyId) throws SQLException;

	/**
	 * 获取该用户在指定月份的指定审批类型中的使用次数
	 *
	 * @param companyInfoId
	 * @param month
	 * @param month
	 * @return
	 * @throws SQLException
	 */
	Map<Integer, Integer> getUsedTimesByMonth(Integer companyInfoId, String month) throws SQLException;

	/**
	 * 获取模板的基本信息
	 *
	 * @param companyId
	 * @param templateIds
	 * @return
	 * @throws SQLException
	 */
	Map<Integer, TemplateDTO> getTemplateDTOMap(Integer companyId, List<Integer> templateIds) throws SQLException;

	/**
	 * 获取模板基本详情
	 *
	 * @param companyId
	 * @param templateId
	 * @return
	 * @throws SQLException
	 */
	TemplateDTO getTemplateDTO(Integer companyId, Integer templateId) throws SQLException;

	/**
	 * 获取公司模板类型的使用次数
	 *
	 * @param companyId
	 * @return
	 * @throws SQLException
	 */
	List<TemplateInfoDTO> selectTemplateUsedTimes(Integer companyId) throws SQLException;

	/**
	 * 获取适用为全公司的审批类型
	 *
	 * @param companyId
	 * @return
	 * @throws SQLException
	 */
	Map<Integer, List<TemplateRangeDTO>> getTemplatesGroupByType(Integer companyId) throws SQLException;

	/**
	 * 获取指定类型的模板适用范围列表
	 *
	 * @param defaultType
	 * @param companyId
	 * @return
	 * @throws SQLException
	 */
	List<Template> getTemplatesRangeByType(Integer defaultType, Integer companyId) throws SQLException;


	/**
	 * 获取关联成本分析的模板ids
	 *
	 * @param companyId
	 * @return
	 * @throws SQLException
	 */
	List<TemplateDTO> getAssociateCostTemplateDTOs(Integer companyId) throws SQLException;


	/**
	 * 获取公司所有的模板
	 *
	 * @param companyId
	 * @return
	 * @throws SQLException
	 */
	List<TemplateDTO> selectCompanyTemplates(Integer companyId) throws SQLException;

	/**
	 * 获取条件审批流的详细设置
	 *
	 * @param companyId
	 * @param templateIds
	 * @return
	 * @throws SQLException
	 */
	Map<Integer, List<ConditionFlowDTO>> getConditionFlowTemplateDTOs(Integer companyId, String templateIds) throws SQLException;

	/**
	 * 根据祖先id批量获取模版id集合
	 *
	 * @param ancestorIds
	 * @return
	 * @throws SQLException
	 */
	Map<Integer, List<Integer>> selectTemplateIdsByAncestorIds(String ancestorIds) throws SQLException;

	/**
	 * 根据类型获取模版
	 *
	 * @param companyId
	 * @param templateType
	 * @return
	 * @throws SQLException
	 */
	List<TemplateDTO> selectCompanyTemplatesByTemplateType(Integer companyId, Integer templateType) throws SQLException;

	/**
	 * 根据模版名查审批
	 *
	 * @param companyId
	 * @param templateName
	 * @throws SQLException
	 * @return
	 */
	List<Integer> selectTemplateIdsByName(Integer companyId, String templateName) throws SQLException;
}
